/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package simhya.model.store;

import java.util.ArrayList;
import simhya.matheval.SymbolArray;


/**
 *
 * @author Luca
 */
public interface Predicate {
    
    /**
     * evaluates the truth value of the predicate, according to the current state of the store
     * @return the new truth value
     */
    public boolean evaluate();
    /**
     * evaluates the thruth value of the predicate, according to passed variables
     * @param vars the value of variables
     * @return the truth value of the predicate
     */
    public boolean evaluate(SymbolArray vars);
    /**
     *
     * @return a list of variable ID of the variables involved in the function.
     */
    public ArrayList<Integer> getVariableList();

    /**
     * completes the initialization of the predicate, if needed;
     */
    public void initialize();


    public boolean isTautology();
    public boolean isContradiction();

    
}

